标签: pointers

在C中反转一个字符串

我开发了一个反向字符串程序.我想知道是否有更好的方法来做到这一点,如果我的代码有任何潜在的问题.我期待练习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)

c string pointers

34
推荐指数
8
解决办法
16万
查看次数

何时使用malloc作为char指针

我特别关注何时在char指针上使用malloc

char *ptr;
ptr = "something";
...code...
...code...
ptr = "something else";
Run Code Online (Sandbox Code Playgroud)

malloc是否会为了这个微不足道的东西?如果是,为什么?如果没有,那么什么时候需要char指针?

c malloc pointers char

34
推荐指数
3
解决办法
13万
查看次数

字符数组的文字字符串初始值设定项

在以下规则中,当数组衰减到指针时:

左值[见2.5问题]型阵列的-T出现在表达衰变(有三个例外)转换成一个指向它的第一个元素的; 结果指针的类型是指向T的指针.

(例外情况是,当阵列是的sizeof或&运算符的操作数,或为字符数组一个文本字符串初始化.)

如何理解数组是"字符数组的文字字符串初始值设定项"的情况?请举个例子.

谢谢!

c arrays string pointers c99

34
推荐指数
3
解决办法
9740
查看次数

什么是长指针?

我正在读一本书,它提到某些数据类型是长指针.只是好奇这意味着什么.谢谢.

c c++ pointers

34
推荐指数
2
解决办法
2万
查看次数

取消引用结构指针内的指针

我有一个结构:

struct mystruct
{
    int* pointer;
};

structure mystruct* struct_inst;
Run Code Online (Sandbox Code Playgroud)

现在我想改变指向的值struct_inst->pointer.我怎样才能做到这一点?

编辑

我没有写它,但pointer已经指向分配的内存区域malloc.

c struct pointers

34
推荐指数
1
解决办法
5万
查看次数

为什么数组不能作为函数参数传递?

为什么不能将数组作为函数参数传递?

我一直在阅读这本C++书,上面写着"你不能将数组作为函数参数传递",但它从未解释过为什么.此外,当我在网上查找时,我发现了一些评论,比如'你为什么要这样做?' 这不是我会这样做的,我只是想知道为什么你不能这样做.

c++ arrays pointers pass-by-reference

34
推荐指数
3
解决办法
9124
查看次数

为什么reinterpret_cast不能将int转换为int?

我的编译器是最新的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?

c++ pointers integer type-conversion reinterpret-cast

34
推荐指数
2
解决办法
1187
查看次数

不是double [] []相当于**double?

我问这个是因为我的程序有两个函数来乘法矩阵,它们只乘以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)

c++ pointers matrix multidimensional-array

34
推荐指数
2
解决办法
2695
查看次数

我可以将2D数组视为连续的1D数组吗?

请考虑以下代码:

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

33
推荐指数
3
解决办法
6087
查看次数

从函数返回指针

我试图从函数返回指针.但我得到分段错误.有人请告诉代码有什么问题

#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)

c pointers segmentation-fault

33
推荐指数
2
解决办法
11万
查看次数