我开发了一个反向字符串程序.我想知道是否有更好的方法来做到这一点,如果我的代码有任何潜在的问题.我期待练习C的一些高级功能.
char* reverse_string(char *str)
{
char temp;
size_t len = strlen(str) - 1;
size_t i;
size_t k = len;
for(i = 0; i < len; i++)
{
temp = str[k];
str[k] = str[i];
str[i] = temp;
k--;
/* As 2 characters are changing place for each cycle of the loop
only traverse half the array of characters */
if(k == (len / 2))
{
break;
}
}
}
Run Code Online (Sandbox Code Playgroud) 我特别关注何时在char指针上使用malloc
char *ptr;
ptr = "something";
...code...
...code...
ptr = "something else";
Run Code Online (Sandbox Code Playgroud)
malloc是否会为了这个微不足道的东西?如果是,为什么?如果没有,那么什么时候需要char指针?
在以下规则中,当数组衰减到指针时:
左值[见2.5问题]型阵列的-T出现在表达衰变(有三个例外)转换成一个指向它的第一个元素的; 结果指针的类型是指向T的指针.
(例外情况是,当阵列是的sizeof或&运算符的操作数,或为字符数组一个文本字符串初始化.)
如何理解数组是"字符数组的文字字符串初始值设定项"的情况?请举个例子.
谢谢!
我有一个结构:
struct mystruct
{
int* pointer;
};
structure mystruct* struct_inst;
Run Code Online (Sandbox Code Playgroud)
现在我想改变指向的值struct_inst->pointer.我怎样才能做到这一点?
编辑
我没有写它,但pointer已经指向分配的内存区域malloc.
为什么不能将数组作为函数参数传递?
我一直在阅读这本C++书,上面写着"你不能将数组作为函数参数传递",但它从未解释过为什么.此外,当我在网上查找时,我发现了一些评论,比如'你为什么要这样做?' 这不是我会这样做的,我只是想知道为什么你不能这样做.
我的编译器是最新的VC++ 2013 RC.
void f()
{
int n1 = 0;
int n2 = reinterpret_cast<int>(n1); // error C2440
}
Run Code Online (Sandbox Code Playgroud)
错误C2440:'reinterpret_cast':无法从'int'转换为'int'
为什么在这种明显的情况下不能使用reinterpret_cast?
我问这个是因为我的程序有两个函数来乘法矩阵,它们只乘以4x4和4x1矩阵.标题是:
double** mult4x1(double **m1, double **m2);
double** mult4x4(double **m1, double **m2);
Run Code Online (Sandbox Code Playgroud)
它们执行m1*m2并将其返回**两倍,下面是4x4乘法的片段.
double** mult4x4(double **m1, double **m2){
double** result = (double**) malloc(sizeof(double)*4);
for (int i = 0; i < 4; i++) {
result[i] = (double*) malloc(sizeof(double)*4);
}
...multiply...
return result;
}
Run Code Online (Sandbox Code Playgroud)
mult4x1和mult4x4之间的区别仅在于它们内部使用的索引.
我有这3个矩阵:
double m1[4][4] = {
{2, 3, 5, 6},
{9, 8, 1, 7},
{5, 4, 3, 1},
{7, 6, 1, 2}
};
double m2[4][4] = {
{1, 0, 0, 0},
{0, 1, 0, 0},
{0, 0, 1, 0}, …Run Code Online (Sandbox Code Playgroud) 请考虑以下代码:
int a[25][80];
a[0][1234] = 56;
int* p = &a[0][0];
p[1234] = 56;
Run Code Online (Sandbox Code Playgroud)
第二行是否调用未定义的行为?第四行怎么样?
c++ arrays pointers multidimensional-array undefined-behavior
我试图从函数返回指针.但我得到分段错误.有人请告诉代码有什么问题
#include<stdio.h>
int *fun();
main()
{
int *ptr;
ptr=fun();
printf("%d",*ptr);
}
int *fun()
{
int *point;
*point=12;
return point;
}
Run Code Online (Sandbox Code Playgroud)