相关疑难解决方法(0)

常量指针与常量值上的指针

以下声明之间有什么区别?

char * const a;
const char * a;
Run Code Online (Sandbox Code Playgroud)

为了理解我写这个小程序的区别:

#include <stdio.h>
#include <stdlib.h>


int main (int argc, char **argv)
{
    char a = 'x';
    char b = 'y';

    char * const pc1 = &a;
    const char * pc2 = &a;

    printf ("Before\n");
    printf ("pc1=%p\n", pc1);
    printf ("*pc1=%c\n", *pc1);
    printf ("pc2=%p\n", pc2);
    printf ("*pc2=%c\n", *pc2);

    *pc1 = b;
/*     pc1 = &b; */

/*     *pc2 = b; */
    pc2 = &b;

    printf ("\n\n");

    printf ("After\n");
    printf ("pc1=%p\n", pc1);
    printf ("*pc1=%c\n", …
Run Code Online (Sandbox Code Playgroud)

c pointers const

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

Const之前还是const之后?

首先,你可能知道const可以用来制作一个对象的数据或一个不可修改的指针或两者兼而有之.

const Object* obj; // can't change data
Object* const obj; // can't change pointer
const Object* const obj; // can't change data or pointer
Run Code Online (Sandbox Code Playgroud)

但是您也可以使用以下语法:

Object const *obj; // same as const Object* obj;
Run Code Online (Sandbox Code Playgroud)

唯一重要的是你把const关键字放在星号的哪一边.我个人更喜欢把const上式的左边指定它的数据是不可修改的,因为我觉得它读取我的左到右的心态更好,但其语法是先?

更重要的是,为什么有两种正确的const数据指定方式,如果有的话,你会更喜欢或需要哪种方式?

编辑:

所以听起来这是一个武断的决定,因为编译器应该如何解释事物的标准早在我出生之前起草了.因为const应用于关键字左侧的内容(默认情况下?)我猜他们认为添加"快捷方式"以应用关键字并以其他方式输入限定符至少直到声明更改为止时没有任何损害解析*或&...

这是C的情况,然后我假设?

c c++ syntax const

132
推荐指数
7
解决办法
5万
查看次数

将二维数组传递给常量参数的函数

我从C Primer Plus中了解到,如果你想保护数组不被函数意外修改,你应该const在函数定义的标题中的指针声明之前添加修饰符.

遵循这个明智的建议,在下面的最小例子中,我试图将一个非常数二维数组array传递给函数Sum2D,其中一个参数是a pointer-to-const-int[2].

#include <stdio.h>
#define ROWS 2
#define COLS 2
int Sum2D(const int ar[][COLS], int rows); //use `const` to protect input array
int main(void)
{
    int array[ROWS][COLS]={{1,2},{3,4}}; //the non-constant array

    printf( "%d\n", Sum2D(array,ROWS) );

    return 0;
}

int Sum2D(const int ar[][COLS], int rows)
{
    int total=0;
    int i,j;
    for( i=0 ; i<rows ; i++ )
    {
        for( j=0 ; j<COLS ; j++ )
        {
            total+=ar[i][j];
        }
    }
    return …
Run Code Online (Sandbox Code Playgroud)

c arrays pointers gcc-warning

4
推荐指数
1
解决办法
3122
查看次数

标签 统计

c ×3

const ×2

pointers ×2

arrays ×1

c++ ×1

gcc-warning ×1

syntax ×1